package com.kexilo.system.security.service;


import com.kexilo.core.security.domain.SysLogininfor;

import java.util.List;

/**
 * 系统访问日志情况信息 服务层
 * 
 * @author Kexilo
 */
public interface ISysLogininforService {
    
    /**
     * 新增系统登录日志
     * 
     * @param logininfor 访问日志对象
     */
    void insertLogininfor(SysLogininfor logininfor);

    /**
     * 查询系统登录日志集合
     * 
     * @param logininfor 访问日志对象
     * @return 登录记录集合
     */
    List<SysLogininfor> selectLogininforList(SysLogininfor logininfor);

    /**
     * 批量删除系统登录日志
     * 
     * @param infoIds 需要删除的登录日志ID
     * @return 结果
     */
    int deleteLogininforByIds(Long[] infoIds);

    /**
     * 清空系统登录日志
     */
    void cleanLogininfor();

    /**
     * 记录登录信息
     * 
     * @param username 用户名
     * @param status 状态
     * @param message 消息内容
     * @param args 列表
     */
    void recordLogininfor(final String username, final String status, final String message, final Object... args);

    /**
     * 查询用户最近登录记录
     * 
     * @param userName 用户名
     * @param limit 限制条数
     * @return 登录记录
     */
    List<SysLogininfor> selectRecentLoginByUserName(String userName, int limit);

    /**
     * 计算用户风险评分
     * 
     * @param userName 用户名
     * @param ipaddr IP地址
     * @param deviceFingerprint 设备指纹
     * @return 风险评分
     */
    int calculateRiskScore(String userName, String ipaddr, String deviceFingerprint);

    /**
     * 检查是否异地登录
     * 
     * @param userName 用户名
     * @param ipaddr IP地址
     * @return 是否异地登录
     */
    boolean checkRemoteLogin(String userName, String ipaddr);

    /**
     * 检查是否新设备登录
     * 
     * @param userName 用户名
     * @param deviceFingerprint 设备指纹
     * @return 是否新设备登录
     */
    boolean checkNewDevice(String userName, String deviceFingerprint);
}
